package msghandler

import (
	"gitee.com/night-tc/gobige/global"
	"gitee.com/night-tc/gobige/msgdef"
)

/*
消息处理拥有者需要实现的方法
*/
type IMsgOwner interface {
	// OnPanic 发生Panic的时候，做的处理
	OnPanic(err error)
	// OnMsgBefore 处理消息前
	OnMsgBefore(name string, msg msgdef.IMsg)
	// OnMsged 处理消息后
	OnMsged(name string, msg msgdef.IMsg)
	// OnRpcBefore 处理RPC消息前
	OnRpcBefore(name string, msg msgdef.IMsg)
	// OnRpced 处理RPC消息后
	OnRpced(name string, msg msgdef.IMsg)
	// OnRpcReturn 处理RPC消息回复 err为nil表示成功，并不需要回复
	OnRpcReturn(msg msgdef.IMsg, err error)
	// OnSrvReturn 处理Srv消息回复 err为nil表示成功，并不需要回复
	OnSrvReturn(req, msg msgdef.IMsg, err error)
}

// MsgOwner 默认实现，所有方法为空实现
type MsgOwner struct {
}

// OnPanic 发生Panic的时候，做的处理
func (this *MsgOwner) OnPanic(err error) {

}

// OnMsgBefore 处理消息前
func (this *MsgOwner) OnMsgBefore(name string, msg msgdef.IMsg) {

}

// OnMsged 处理消息后
func (this *MsgOwner) OnMsged(name string, msg msgdef.IMsg) {

}

// OnRpcBefore 处理RPC消息前
func (this *MsgOwner) OnRpcBefore(name string, msg msgdef.IMsg) {

}

// OnRpced 处理RPC消息后
func (this *MsgOwner) OnRpced(name string, msg msgdef.IMsg) {

}

// OnRpcReturn 处理RPC消息回复
func (this *MsgOwner) OnRpcReturn(msg msgdef.IMsg, err error) {

}

// OnSrvReturn 处理Srv消息回复
func (this *MsgOwner) OnSrvReturn(req, msg msgdef.IMsg, err error) {
	srv, ok := global.GetSrvInst().(IMsgOwner)
	if !ok {
		return
	}
	srv.OnSrvReturn(req, msg, err)
}
